# Настройки

Основные моменты при настройке системы привилегий.

- Ссылки на файлы
- Главный файл
- Проверки
- Модули
- Глобальные настройки модулей

__ВАЖНО: _Все конфиг-файлы должны соответствовать формату JSON. Допускаются комментарии вида `/* comment */` или `// comment`.___

## Ссылки на файлы

В целях оптимизации и разбиения конфигов на отдельные файлы, некоторые элементы конфига могут быть заменены на ссылку вида `"File:<path>/<file>"`.

- `<path>` - путь до файла, относительно папки `amxmodx/configs/plugins/VipModular/`.
- `<file>` - название `.json` файла без расширения.

При повторном обращении к файлу по ссылке, вместо чтения файла, на место ссылки будет подставлен обьект, прочитанный из этого файла в первый раз.

## Главный файл

Основным файлом настроек является файл `amxmodx/configs/plugins/VipModular/Vips.json`.

Также, настройки привилегий можно хранить в нескольких файлах в папке `amxmodx/configs/plugins/VipModular/Vips/`. Название файла любое, главное - расширение `.json`. Структура та же.

Можно использовать любой из вариантов или оба сразу. Файл `Vips.json` читается в первую очередь, а какой-либо порядок чтения файлов из папки `Vips` не гарантируется.

### Структура главного файла

```jsonc
[
    {
        "Access": [ /* ... */ ],
        "Modules": [ /* ... */ ]
    },
    { /* ... */ }
]
```

### Корневой массив

Элементами корневого массива являются обьекты, содержащие поля `Access` и `Modules`.

### Поле `Access`

Поле `Access` должно содержать одну или более проверок, привязанных к игроку.

_Если проверка одна, она может быть указана как обьект, вместо массива._

_Может являться ссылкой на файл. Как массив, так и элементы массива._

### Поле `Modules`

Поле `Modules` содержит один или более модулей, которые будут выданы игроку, если он прошёл все проверки из поля `Access`.

_Если модуль один, он может быть указан как обьект, вместо массива._

_Может являться ссылкой на файл. Как массив, так и элементы массива._

## Проверки

Список доступных типов проверок может быть расширен специальными плагинами-расширениями с приставкой `L`.

Типы проверок деляться на две подгруппы: __Привязанные к игрокам__ и __свободные__.

- __Проверки, привязанные к игрокам__ не могут быть использованы в конфигах, не применяемых к игрокам, например, в глобальных настройках модулей.
- __Свободные проверки__ могут использоваться в любых списках проверок.

### Структура обьекта проверки

```jsonc
{
    "Limit": "<LimitTypeName>",

    "<Param1>": "",
    /* ... */
    "<ParamN>": []
}
```

- `<LimitTypeName>` - название типа проверки. Определяется плагином-расширением, регистрирующим тип проверки.
- `<ParamX>` - какой-либо параметр проверки. Названия и типы параметров определяются плагином-расширением, добавляющим тип проверки.

## Модули

Проверки - обьект, выдаваемый игроку и выполняющий при этом некоторые действия, определённые плагином-расширением.

Список доступных модулей может быть расширен специальными плагинами-расширениями с приставкой `M`.

### Структура обьекта модуля

```jsonc
{
    "Module": "<ModuleName>",

    "<Param1>": "",
    /* ... */
    "<ParamN>": []
}
```

- `<ModuleName>` - название модуля. Определяется плагином-расширением, регистрирующим модуль.
- `<ParamX>` - какой-либо параметр модуля. Названия и типы параметров определяются плагином-расширением, добавляющим модуль.

## Настройка активности модулей

За настройку активации модулей отвечает плагин `VipM-ModulesLimiter`. Если данные настройки не используются, его можно отключить, в таком случае все модули всегда будут активны.

Файл настроек активности модулей: `amxmodx/configs/plugins/VipModular/Modules.json`.

### Структура файла настройки активности модулей

```jsonc
[
    {
        "Modules": [ /* ... */ ],
        "Limits": [ /* ... */ ]
    },
    { /* ... */ }
]
```

- `Modules` - список названий модулей, к которым будут применяться ограничения.
- `Limits` - ограничения, применяемые для активации модуля.

### Принцип работы

Попытка активации всех используемых модулей запускается после полной загрузки системы привилегий.

Если хоть одно ограничение из поля `Limits` выполняется, модули из поля `Modules` будут активны. Если модуль не упоминается в этом файле, он будет активен всегда.

Активируются только те модули, которые хотя бы раз встречаются в настройках привилегий.

## Типы параметров

|Тип        |`E_ParamType`  |Описание
|:---       |:---           |:---
|Integer    |`ptInteger`    |Целое число
|Float      |`ptFloat`      |Дробное число
|Bool       |`ptBoolean`    |true/false
|String     |`ptString`     |Строка
|Color      |`ptColor`      |Цвет (Массив из трёх целых чисел)
|Vector2    |`ptVector2`    |Двумерный вектор (Массив из двух дробных чисел)
|Vector3    |`ptVector3`    |Трёхмерный вектор (Массив из трёх дробных чисел)
|Limit      |`ptLimit`      |Одна проверка
|Limits     |`ptLimits`     |Массив проверок
|Custom     |`ptCustom`     |Сложный тип, зависит от модуля, использующего его
